home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / Pascal / Book Demos in Pascal / SpriteEngine / SE No Timer / SpriteHandlers.p < prev    next >
Text File  |  1995-04-06  |  4KB  |  140 lines

  1. unit SpriteHandlers;
  2.  
  3. interface
  4.  
  5.     uses
  6. {$IFC UNDEFINED THINK_PASCAL}
  7.         Types, QuickDraw, Fonts, Events, Packages, Menus, Dialogs, Windows,{}
  8.         OSUtils, ToolUtils, OSEvents, 
  9. {$ENDC}
  10.         QDOffScreen, SpriteStructure, SpriteTools;
  11.  
  12.     procedure MoveSprite (theSprite: SpritePtr);
  13.     procedure HitSprite (theSprite: SpritePtr; anotherSprite: SpritePtr);
  14.     procedure InitSprites;
  15.  
  16. implementation
  17.  
  18. { Custom handlers - application dependent ***}
  19. {}
  20. {Edit this as necessary. It should always include the following three routines:}
  21. {}
  22. {MoveSprite: move the sprite}
  23. {}
  24. {HitSprite: handle collisions between two sprites}
  25. {}
  26. {InitSprites: Load all faces and create initial sprites }
  27.  
  28.  
  29. var
  30. firstFace, secondFace, thirdFace:GrafPtr;
  31.  
  32.  
  33. Procedure MoveSprite(theSprite:SpritePtr);
  34.  begin 
  35.     theSprite^.speed.v := theSprite^.speed.v + 1; { Simple gravity}
  36.     theSprite^.fixedPointPosition.h := theSprite^.fixedPointPosition.h + theSprite^.speed.h;
  37.     theSprite^.fixedPointPosition.v := theSprite^.fixedPointPosition.v + theSprite^.speed.v;
  38.     theSprite^.position.h := BSR(theSprite^.fixedPointPosition.h , 4);
  39.     theSprite^.position.v := BSR(theSprite^.fixedPointPosition.v , 4);
  40.     if KeepOnScreenFixed(theSprite) then;
  41.  End; (*MoveSprite*)
  42.  
  43.  
  44. Procedure HitSprite(theSprite:SpritePtr; anotherSprite:SpritePtr);
  45. var tempSpeed:Integer;
  46. begin
  47.     If RectSeparate(theSprite, anotherSprite) >= 2 Then { 2 or 3: horizontal, otherwise vertical}
  48.      begin 
  49.         tempSpeed := theSprite^.speed.h;
  50.         theSprite^.speed.h := anotherSprite^.speed.h;
  51.         anotherSprite^.speed.h := tempSpeed;
  52.         theSprite^.fixedPointPosition.h := BSL(theSprite^.position.h , 4);
  53.      End
  54.     Else     
  55.      begin 
  56.         tempSpeed := theSprite^.speed.v;
  57.         theSprite^.speed.v := anotherSprite^.speed.v;
  58.         anotherSprite^.speed.v := tempSpeed;
  59.         theSprite^.fixedPointPosition.v := BSL(theSprite^.position.v , 4);
  60.      End;
  61.  
  62.  End; (*HitSprite*)
  63.  
  64.  
  65. Procedure InitSprites;
  66.     var theSprite:SpritePtr;
  67. (*Load all pictures*)
  68.      begin 
  69.     firstFace := LoadFaceFromCicn(128);            (*cicn resource #128.*)
  70.     secondFace := LoadFaceFromCicn(129);            (*cicn resource #129.*)
  71.     thirdFace := LoadFaceFromCicn(130);            (*cicn resource #130.*)
  72.  
  73. (*Create sprites*)
  74.     theSprite := NewSprite;
  75.     theSprite^.face := firstFace;
  76.     SetPt(theSprite^.fixedPointPosition, BSL(100 , 4), BSL(100 , 4));
  77.     SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  78.  
  79.     theSprite := NewSprite;
  80.     theSprite^.face := secondFace;
  81.     SetPt(theSprite^.fixedPointPosition, BSL(50 , 4), BSL(50 , 4));
  82.     SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  83.  
  84.     theSprite := NewSprite;
  85.     theSprite^.face := thirdFace;
  86.     SetPt(theSprite^.fixedPointPosition, BSL(150 , 4), BSL(150 , 4));
  87.     SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  88.  
  89.  
  90. { extra}
  91.  
  92.     theSprite := NewSprite;
  93.     theSprite^.face := firstFace;
  94.     SetPt(theSprite^.fixedPointPosition, BSL(100 , 4), BSL(100 , 4));
  95.     SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  96.  
  97.     theSprite := NewSprite;
  98.     theSprite^.face := secondFace;
  99.     SetPt(theSprite^.fixedPointPosition, BSL(50 , 4), BSL(50 , 4));
  100.     SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  101.  
  102.     theSprite := NewSprite;
  103.     theSprite^.face := thirdFace;
  104.     SetPt(theSprite^.fixedPointPosition, BSL(150 , 4), BSL(150 , 4));
  105.     SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  106.  
  107.     theSprite := NewSprite;
  108.     theSprite^.face := firstFace;
  109.     SetPt(theSprite^.fixedPointPosition, BSL(100 , 4), BSL(100 , 4));
  110.     SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  111.  
  112.     theSprite := NewSprite;
  113.     theSprite^.face := secondFace;
  114.     SetPt(theSprite^.fixedPointPosition, BSL(50 , 4), BSL(50 , 4));
  115.     SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  116.  
  117.     theSprite := NewSprite;
  118.     theSprite^.face := thirdFace;
  119.     SetPt(theSprite^.fixedPointPosition, BSL(150 , 4), BSL(150 , 4));
  120.     SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  121.  
  122.     theSprite := NewSprite;
  123.     theSprite^.face := firstFace;
  124.     SetPt(theSprite^.fixedPointPosition, BSL(100 , 4), BSL(100 , 4));
  125.     SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  126.  
  127.     theSprite := NewSprite;
  128.     theSprite^.face := secondFace;
  129.     SetPt(theSprite^.fixedPointPosition, BSL(50 , 4), BSL(50 , 4));
  130.     SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  131.  
  132.     theSprite := NewSprite;
  133.     theSprite^.face := thirdFace;
  134.     SetPt(theSprite^.fixedPointPosition, BSL(150 , 4), BSL(150 , 4));
  135.     SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  136.  
  137.  End; (*InitSprites*)
  138. end.
  139.  
  140.